GitHub

您所在的位置:网站首页 mysql 分库分表设计 GitHub

GitHub

2024-07-11 07:20| 来源: 网络整理| 查看: 265

[TOC]

项目说明

全新设计的mysql分库分表中间件。产品计划使用netty 4.1开发,基于spring boot/cloud提供管理接口。 支持nio和zero-copy的数据透传;支持数据分库、分表以及复合的分库分表功能;分片算法上除支持常见的hash/murmurHash,mod,range,date,code算法外,还额外支持强行指定。

竞品调查 mycat。功能复杂,分表支持不好,转发效率80%。1.x版本现在仍然一堆bug,无人维护,2.x版本开发中,还不支持分库分表。 原计划参与mycat2.x的开发,但是被恶心了一下,想参与开发必须参加leader-us组织的收费培训。。。 kingshard。使用go编写,特色是支持单库分表,但是整体功能简单,路由特性较少,性能尚可。 sharding-jdbc。当当开发,集群试用下存在连接数问题,很要命,和我们现在的问题一样。 项目特色 基于netty 4.1开发,全面支持zero-copy,流式转发。 基于spring-cloud支持集群配置,并在此基础上提供web管理。 支持多级路由链,可以在hash/range分库分表后,再次使用date分表。 更强大的sql统计功能,可以统计前后端sql的执行信息。 支持对mysql主机性能的检测,比如tps和总体延时。 更高性能的连接池机制,更少的锁。 基于mysql主机的连接控制,而非数据库层面的,更好地维护连接扩展性。 暂时放弃的功能

所有可能造成不稳定、降低性能、在中间件实现别扭的功能,可能都不会实现了。

不支持在中间件层面支持数据聚合、排序等功能,因为没有必要,且造成不稳定。 放弃事务管理,因为无法准确实现分布式事务,且可能造成不稳定。 不支持last_insert_id(),因为对于集群应用毫无价值。 路由功能说明

1.所有不在路由名单里的SQL,直接发到schema的base node上,以满足某些客户端的需要。 1.对于所有的dml,在路由名单里的,不指定参数,默认不予执行,可以配置转发参数。 2.对于所有的ddl,在路由名单里的,不指定参数,默认不予执行,可以配置转发参数。

DML SQL支持

SELECT 支持 UPDATE 支持 DELETE 支持 REPLACE 暂不支持 INSERT 支持单value,多value优化中。

DDL SQL 支持

ALTER TABLE 支持 CREATE TABLE/INDEX 支持 DROP TABLE/INDEX 支持 TRUNCATE TABLE 支持

在虚拟schema上支持

SET SHOW EXPLAIN

分库分表算法 RouteDatabaseByKey 按KEY分库算法 按照prefix+value值来路由到指定库。 参数:prefix:库名前缀。 RouteDatabaseByHash 哈希分库算法 根据给定值的HASH来分库,底层hash算法使用guava的murmurHash3。 默认128个虚拟节点,建议以8的倍数来分库效果比较好。 RouteDatabaseByMod 基于范围的分库算法 根据给定的long值,按照库数量直接mod分库。 要求value值必须为long类型。 RouteDatabaseByRange 基于范围的分库算法 按照固定的long值range来路由。 参数:start:起始位置 range:分区大小 RouteDatabaseByPreset 预设值的分库算法 根据预设信息设置表路由,此算法一般建立放在分表算法的最后,它会覆盖之前的配置。 params:key=routeKey,value="mysqlGroup.database" RouteTableByAutoDate 基于日期的分表算法 根据给定的日期,给出归属表名,支持动态自动建表。 参数: date-pattern: 可以不指定,设置为日期来源格式 format-pattern:格式化成的样式 prepare-num 提前建表的个数 RouteTableByAutoKey 基于关键字的分表算法 根据给定的key,来判断是否存在表,如果没有表,则动态自动创建以key为后缀的表。。 需要在配置参数中配置mysqlGroup和database属性。 RouteTableByHash 基于代码的分表算法 基于hash的分表算法。 参数:routeList=mysqlGroup.database.info3,mysqlGroup.database.info3 RouteTableByMod 基于范围的分表算法 根据给定的long值,按照表数量直接mod分表。 参数:routeList=mysqlGroup.database.info3,mysqlGroup.database.info3 RouteTableByPresent基于范围的分表算法 按照预定分表规则分表。 参数:key=mysqlGroup.database.info3 支持的API /api/stats/run/server 服务器运行期信息 /api/stats/run/mysql mysql运行期信息 /api/stats/sql/server 服务器sql统计信息 /api/stats/sql/mysql mysql sql统计信息 /api/stats/sql/info2 info2 sql统计信息 /api/stats/sql/client 客户端sql统计信息


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3